home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1993 / MacHack 1993.toast / MacHack™ 1987-1992 / MacHack™ '88 / Proceedings '88 / Feldt's Object Stuff / objectMgr stuff / EdOptFuncts.c next >
Encoding:
C/C++ Source or Header  |  1986-12-22  |  9.2 KB  |  424 lines  |  [TEXT/KAHL]

  1. /*
  2. **                           Lanstar - EdOptFuncts
  3. **                           Aztec C compiler 1.06h
  4. **                         Lightspeed C compiler 1.02
  5. **
  6. **                             David A. Surovell
  7. **                                 21-Dec-86
  8. */
  9.  
  10. #include    <extender.h>
  11. #include    <extend2.h>
  12. #include    <EdOpts.h>
  13.  
  14. WindowPtr        edoptWP;
  15. WindowRecord    edoptWR;
  16. ControlHandle    edoptWPB1,edoptWPB2;
  17. ListHandle        fontList,stylList,sizeList,justList;
  18.  
  19. int                TESizes[] = {9,10,12,14,18,24,36};
  20.  
  21.  
  22. Boolean InitEdOpts()
  23. {
  24.     Rect        aRect;
  25.     Boolean        stat;
  26.  
  27.     SetRect(&aRect,20,50,470,200);
  28.     edoptWP = CreateWindow(&edoptWR,&aRect,"\PEditing options",4,
  29.                         FALSE,FALSE,FALSE,FALSE,FALSE);
  30.     TextFont(newYork);
  31.     SetException(edoptWP,EXCPTupdate,TRUE);
  32.  
  33.     stat = BuildEOLists(edoptWP);
  34.  
  35.     SetRect(&aRect,280,110,340,130);
  36.     edoptWPB1 = CreatePushButton(edoptWP,&aRect,"\POK");
  37.     SetRect(&aRect,350,110,410,130);
  38.     edoptWPB2 = CreatePushButton(edoptWP,&aRect,"\PCANCEL");
  39.     DrawControls(edoptWP);
  40.  
  41.     return(stat);
  42. }
  43.  
  44.  
  45. Boolean BuildEOLists(wPtr)
  46. WindowPtr    wPtr;
  47. {
  48.     MenuHandle    dummyMH;
  49.     ListHandle    *theLHP;
  50.     Point        lOffset,cSize;
  51.     int            iCount,rowsVis,i;
  52.     Boolean        stat;
  53.  
  54.     for (i=0; i<4; i++) {
  55.         dummyMH = NewMenu(UniqueID('MENU'),"\Pdummi");
  56.  
  57.         switch (i) {
  58.             case 0:
  59.                 fontList = NULL;
  60.                 theLHP = &fontList;
  61.                 SetPt(&lOffset,10,10);
  62.                 iCount = CountResources('FONT');
  63.                 rowsVis = 6;
  64.                 if (iCount > 0)
  65.                     AddResMenu(dummyMH,'FONT');
  66.                 break;
  67.  
  68.             case 1:
  69.                 stylList = NULL;
  70.                 theLHP = &stylList;
  71.                 iCount = STYLcount;
  72.                 rowsVis = 6;
  73.                 SetPt(&lOffset,125,10);
  74.                 AppendMenu(dummyMH,"\PPlain;Bold;Italic;Underline;Outline;Shadow;Condense;Extend");
  75.                 break;
  76.  
  77.             case 2:
  78.                 sizeList = NULL;
  79.                 theLHP = &sizeList;
  80.                 iCount = SIZEcount;
  81.                 rowsVis = 5;
  82.                 SetPt(&lOffset,240,10);
  83.                 AppendMenu(dummyMH,"\P9 point;10 point;12 point;14 point;18 point;24 point;36 point");
  84.                 break;
  85.  
  86.             case 3:
  87.                 justList = NULL;
  88.                 theLHP = &justList;
  89.                 iCount = JUSTcount;
  90.                 rowsVis = 3;
  91.                 SetPt(&lOffset,355,10);
  92.                 AppendMenu(dummyMH,"\PLeft;Center;Right");
  93.                 break;
  94.         }
  95.  
  96.         if ((iCount < 1) || (ResError() != noErr))
  97.             return(FALSE);
  98.         SetPt(&cSize,TEXTcellH,TEXTcellV);
  99.         stat = LMMenuList(dummyMH,theLHP,wPtr,&lOffset,&cSize,iCount,rowsVis);
  100.         if (dummyMH != NULL)
  101.             DisposeMenu(dummyMH);
  102.         if (stat == FALSE) {
  103.             if (*theLHP != NULL)
  104.                 LDispose(*theLHP);
  105.             *theLHP = NULL;
  106.         }
  107.     }
  108.  
  109.     if (stylList != NULL)
  110.         (**stylList).selFlags = lUseSense | lNoNilHilite | lNoExtend;
  111.  
  112.     return(stat);
  113. }
  114.  
  115. int ShowEdOpts()
  116. {
  117.     if (GetEdOpts(FrontWindow()) == FALSE)
  118.         return(FALSE);
  119.  
  120.     ShowWindow(edoptWP);
  121.     SelectWindow(edoptWP);
  122.     SetPort(edoptWP);
  123.     /* InvalRect(&(edoptWP->portRect)); */
  124. }
  125.  
  126. Boolean HndlEDOwindow()
  127. {
  128.     EventRecord     anEvent;
  129.     WindowPtr          whichWindow;
  130.     ControlHandle    whichControl;
  131.     Point            tPoint,tCell;
  132.     ListHandle        theLH;
  133.     Boolean            stat;
  134.  
  135.     ShowEdOpts();
  136.     UpdateEdoptWindow(edoptWP);
  137.  
  138.     do {
  139.         do {
  140.             SystemTask();
  141.         } while (!GetNextEvent(everyEvent,&anEvent));
  142.  
  143.         if (anEvent.what == mouseDown) {
  144.             FindWindow(pass(anEvent.where),&whichWindow);
  145.             if (whichWindow != edoptWP)
  146.                 SysBeep(10);
  147.             else {
  148.                 tPoint = anEvent.where;
  149.                 GlobalToLocal(&tPoint);
  150.  
  151.                 if (PtInEOLists(pass(tPoint),&theLH) == TRUE) {
  152.                     LClick(pass(tPoint),anEvent.modifiers,theLH);
  153.                     if (theLH == stylList) {
  154.                         SetPt(&tCell,0,0);
  155.                         if (LGetSelect(FALSE,&tCell,theLH) == TRUE) {
  156.                             LMSelectAll(theLH,FALSE);
  157.                             SetPt(&tCell,0,0);
  158.                             LSetSelect(TRUE,pass(tCell),theLH);
  159.                         }
  160.                     }
  161.                 }
  162.                 else {
  163.                     FindControl(pass(tPoint),whichWindow,&whichControl);
  164.                     if (whichControl == edoptWPB1) {
  165.                         HideWindow(edoptWP);
  166.                         return(TRUE);
  167.                     }
  168.                     if (whichControl == edoptWPB2) {
  169.                         HideWindow(edoptWP);
  170.                         return(FALSE);
  171.                     }
  172.                 }
  173.             }
  174.         }
  175.     } while (TRUE);
  176. }
  177.  
  178. Boolean PtInEOLists(lPoint,anLH)
  179. Point        lPoint;
  180. ListHandle    *anLH;
  181. {
  182.     int        i;
  183.  
  184.     for (i=0; i<4; i++) {
  185.         switch (i) {
  186.             case 0: *anLH = fontList;    break;
  187.             case 1: *anLH = stylList;    break;
  188.             case 2: *anLH = sizeList;    break;
  189.             case 3: *anLH = justList;    break;
  190.         }
  191.  
  192.         if (LMFindList(pass(lPoint),*anLH) > inDesk)
  193.             return(TRUE);
  194.     }
  195.  
  196.     *anLH = NULL;
  197.     return(FALSE);
  198. }
  199.  
  200.  
  201. Boolean GetEdOpts(wPtr)
  202. WindowPtr    wPtr;
  203. {
  204.     WData    WD;
  205.     Point    tCell;
  206.     int        cellLen,cellFNum,i;
  207.     int        theFont,theStyles,theSize;
  208.     char    fontName[256];
  209.  
  210.     GetWData(wPtr,&WD);
  211.     if (!ValidWData(&WD) || (WD.TEH == NULL))
  212.         return(FALSE);
  213.  
  214.     LMSelectAll(fontList,FALSE);
  215.     LMSelectAll(stylList,FALSE);
  216.     LMSelectAll(sizeList,FALSE);
  217.     LMSelectAll(justList,FALSE);
  218.  
  219.     /* get font info and update the fontList */
  220.     theFont = (**(WD.TEH)).txFont;
  221.     if (theFont == applFont) {
  222.         SetPt(&tCell,0,0);
  223.         if (LSearch("Geneva",6,NULL,&tCell,fontList) == TRUE)
  224.             LSetSelect(TRUE,pass(tCell),fontList);
  225.     }
  226.     else {
  227.         for (i=0; i < (**fontList).dataBounds.bottom; i++) {
  228.             SetPt(&tCell,0,i);
  229.             cellLen = 256;
  230.             LGetCell(&(fontName[1]),&cellLen,pass(tCell),fontList);
  231.             fontName[0] = (unsigned char)cellLen;
  232.             GetFNum(fontName,&cellFNum);
  233.             if (cellFNum == theFont) {
  234.                 LSetSelect(TRUE,pass(tCell),fontList);
  235.                 break;
  236.             }
  237.         }
  238.     }
  239.     if (!PtInRect(pass(tCell),&((**fontList).visible)))
  240.         LAutoScroll(fontList);
  241.  
  242.     /* get style info and update the styleList */
  243.     theStyles = (**(WD.TEH)).txFace;
  244.     if (theStyles == 0) {
  245.         SetPt(&tCell,0,0);
  246.         LSetSelect(TRUE,pass(tCell),stylList);
  247.     }
  248.     else {
  249.         for (i=0; i < (STYLcount-1); i++)
  250.             if (((int)1 << i) & theStyles) {
  251.                 SetPt(&tCell,0,i+1);
  252.                 LSetSelect(TRUE,pass(tCell),stylList);
  253.             }
  254.     }
  255.  
  256.     /* get size info and update the sizeList */
  257.     theSize = (**(WD.TEH)).txSize;
  258.     if (theSize == 0) {
  259.         SetPt(&tCell,0,0);
  260.         if (LSearch("12 point",8,NULL,&tCell,sizeList) == TRUE)
  261.             LSetSelect(TRUE,pass(tCell),sizeList);
  262.     }
  263.     else {
  264.         for (i=0; i<SIZEcount; i++)
  265.             if (theSize == TESizes[i]) {
  266.                 SetPt(&tCell,0,i);
  267.                 LSetSelect(TRUE,pass(tCell),sizeList);
  268.                 break;
  269.             }
  270.     }
  271.     if (!PtInRect(pass(tCell),&((**sizeList).visible)))
  272.         LAutoScroll(sizeList);
  273.  
  274.     /* get justification info and update the justList */
  275.     switch ((**(WD.TEH)).just) {
  276.         case teJustLeft:    SetPt(&tCell,0,0);    break;
  277.         case teJustCenter:    SetPt(&tCell,0,1);    break;
  278.         case teJustRight:    SetPt(&tCell,0,2);    break;
  279.         default:            SetPt(&tCell,0,0);    break;
  280.     }
  281.     LSetSelect(TRUE,pass(tCell),justList);
  282.  
  283.     return(TRUE);
  284. }
  285.  
  286.  
  287. Boolean SetEdOpts(wPtr)
  288. WindowPtr    wPtr;
  289. {
  290.     WData        WD;
  291.     GrafPtr        savePort;
  292.     FontInfo    fInfo;
  293.     Point        tCell;
  294.     int            cellLen,cellFNum;
  295.     char        fontName[256];
  296.  
  297.     GetWData(wPtr,&WD);
  298.     if (!ValidWData(&WD) || (WD.TEH == NULL))
  299.         return(FALSE);
  300.  
  301.     SetCursor(*(GetCursor(watchCursor)));
  302.  
  303.     /* get fontList selection and update the edit window */
  304.     SetPt(&tCell,0,0);
  305.     (**(WD.TEH)).txFont = 0;
  306.     if (LGetSelect(TRUE,&tCell,fontList) == TRUE) {
  307.         cellLen = 256;
  308.         LGetCell(&(fontName[1]),&cellLen,pass(tCell),fontList);
  309.         fontName[0] = (unsigned char)cellLen;
  310.         GetFNum(fontName,&((**(WD.TEH)).txFont));
  311.     }
  312.  
  313.     /* get styleList selection(s) and update the edit window */
  314.     SetPt(&tCell,0,1);
  315.     (**(WD.TEH)).txFace = 0;
  316.     while (LGetSelect(TRUE,&tCell,stylList) == TRUE) {
  317.         (**(WD.TEH)).txFace |= (int)1 << (tCell.v-1);
  318.         LNextCell(TRUE,TRUE,&tCell,stylList);
  319.     }
  320.  
  321.     /* get sizeList selection and update the edit window */
  322.     SetPt(&tCell,0,0);
  323.     (**(WD.TEH)).txSize = 0;
  324.     if (LGetSelect(TRUE,&tCell,sizeList) == TRUE)
  325.         (**(WD.TEH)).txSize = TESizes[tCell.v];
  326.  
  327.     /* get justList selection and update the edit window */
  328.     SetPt(&tCell,0,0);
  329.     (**(WD.TEH)).just = teJustLeft;
  330.     if (LGetSelect(TRUE,&tCell,justList) == TRUE)
  331.         switch (tCell.v) {
  332.             case 0:        (**(WD.TEH)).just = teJustLeft;        break;
  333.             case 1:        (**(WD.TEH)).just = teJustCenter;    break;
  334.             case 2:        (**(WD.TEH)).just = teJustRight;    break;
  335.             default:    (**(WD.TEH)).just = teJustLeft;        break;
  336.         }
  337.  
  338.     /* update the grafPort */
  339.     GetPort(&savePort);
  340.     SetPort(wPtr);
  341.  
  342.     TextFont((**(WD.TEH)).txFont);
  343.     TextFace((**(WD.TEH)).txFace);
  344.     TextSize((**(WD.TEH)).txSize);
  345.  
  346.     /* update the TextEdit record */
  347.     GetFontInfo(&fInfo);
  348.     (**(WD.TEH)).fontAscent = fInfo.ascent;
  349.     (**(WD.TEH)).lineHeight = fInfo.ascent + fInfo.descent + fInfo.leading;
  350.     TECalText(WD.TEH);
  351.     TESetScrollRange(wPtr);
  352.  
  353.     InvalRect(&(wPtr->portRect));
  354.     SetPort(savePort);
  355.  
  356.     /* we're back, live... */
  357.     InitCursor();
  358.  
  359.     return(TRUE);
  360. }
  361.  
  362.  
  363. int UpdateEdoptWindow(wPtr)
  364. WindowPtr    wPtr;
  365. {
  366.     GrafPtr        savePort;
  367.     Rect        tRect;
  368.  
  369.     GetPort(&savePort);
  370.     SetPort(wPtr);
  371.     BeginUpdate(wPtr);
  372.         if (fontList != NULL) {
  373.             LUpdate(((GrafPtr)wPtr)->visRgn,fontList);
  374.             tRect = (**fontList).rView;
  375.             InsetRect(&tRect,-1,-1);
  376.             FrameRect(&tRect);
  377.         }
  378.         if (stylList != NULL) {
  379.             LUpdate(((GrafPtr)wPtr)->visRgn,stylList);
  380.             tRect = (**stylList).rView;
  381.             InsetRect(&tRect,-1,-1);
  382.             FrameRect(&tRect);
  383.         }
  384.         if (sizeList != NULL) {
  385.             LUpdate(((GrafPtr)wPtr)->visRgn,sizeList);
  386.             tRect = (**sizeList).rView;
  387.             InsetRect(&tRect,-1,-1);
  388.             FrameRect(&tRect);
  389.         }
  390.         if (justList != NULL) {
  391.             LUpdate(((GrafPtr)wPtr)->visRgn,justList);
  392.             tRect = (**justList).rView;
  393.             InsetRect(&tRect,-1,-1);
  394.             FrameRect(&tRect);
  395.         }
  396.     EndUpdate(wPtr);
  397.     DrawControls(wPtr);
  398.     SetPort(savePort);
  399. }
  400.  
  401.  
  402. void KillEdOpts()
  403. {
  404.     if (fontList != NULL)
  405.         LDispose(fontList);
  406.     if (stylList != NULL)
  407.         LDispose(stylList);
  408.     if (sizeList != NULL)
  409.         LDispose(sizeList);
  410.     if (justList != NULL)
  411.         LDispose(justList);
  412.  
  413.     KillWindow(edoptWP);
  414.  
  415.     edoptWP = NULL;
  416.     edoptWPB1 = NULL;
  417.     edoptWPB2 = NULL;
  418.  
  419.     fontList = NULL;
  420.     stylList = NULL;
  421.     sizeList = NULL;
  422.     justList = NULL;
  423. }
  424.